题目描述
求出满足以下条件的 n*m 的 01 矩阵个数:
- 第 i 行第 1~li 列恰好有 1 个 1。
- 第 i 行第 ri~m 列恰好有 1 个 1。
- 每列至多有 1 个 1。
补:li~ri中不能放 1(写的时候直接默认如此了不如初三小哥观察仔细)
输入数据
第一行两个整数 n,m。接下来 n 行每行 2 个整数 li,ri。
输出数据
一行一个整数表示答案。对 998244353 取模。
样例输入
2 6
2 4
5 6
样例输出
12
数据范围
对于 20% 的数据,n,m <= 12。
对于 40% 的数据,n,m <= 50。
对于 70% 的数据,n,m <= 300。
对于 100% 的数据,n,m <= 3000,1 <= li < ri <= m。
解题思路
一道比较抽象的动态规划题。
打代码时一边写一边忘,一边忘一边写,所以写篇博客加深记忆。
因为每列只能放一个 1,所以我们可以把它拍成 1 行来考虑。
f[ i ][ j ]表示前 i 列共放置了 j 个右区间 1 的方案数。(拒绝感性理解)
转移方程:
枚举 i,加上放或者不放右区间 1 的方案数。
越过左区间右端点时乘上需要放置的左区间 1 的方案数。
具体可参考代码注释。
代码
1 |
|
题目来源
暂无